import time
import random


def generate_time_based_random(
        precision: str = "millisecond",  # 精度：second/millisecond/microsecond
        random_length: int = 3  # 随机数位数（2-6位）
) -> str:
    """
    按时间生成指定精度的随机数字符串

    参数:
        precision: 时间精度
            - "second": 秒级（格式：YYYYMMDDHHMMSS_随机数）
            - "millisecond": 毫秒级（格式：YYYYMMDDHHMMSSfff_随机数）
            - "microsecond": 微秒级（格式：YYYYMMDDHHMMSSffffff_随机数）
        random_length: 随机数位数（默认3位，范围2-6）

    返回:
        时间+随机数组合的字符串
    """
    # 校验参数
    if precision not in ["second", "millisecond", "microsecond"]:
        raise ValueError("精度必须是 'second'/'millisecond'/'microsecond'")
    if not (2 <= random_length <= 6):
        raise ValueError("随机数位数必须在2-6之间")

    # 获取当前时间戳和结构化时间
    current_time = time.time()  # 秒级时间戳（带小数）
    struct_time = time.localtime(current_time)

    # 基础时间字符串（年月日时分秒）
    time_str = time.strftime("%Y%m%d%H%M%S", struct_time)

    # 补充不同精度的时间部分
    if precision == "millisecond":
        # 毫秒部分（000-999）
        milliseconds = int((current_time - int(current_time)) * 1000)
        time_str += f"{milliseconds:03d}"
    elif precision == "microsecond":
        # 微秒部分（000000-999999）
        microseconds = int((current_time - int(current_time)) * 1000000)
        time_str += f"{microseconds:06d}"

    # 生成指定位数的随机数
    min_rand = 10 ** (random_length - 1)
    max_rand = (10 ** random_length) - 1
    random_num = random.randint(min_rand, max_rand)

    # 组合结果
    return f"{time_str}_{random_num}"